package com.weishi.project.training.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.weishi.project.api.vo.*;
import com.weishi.project.training.domain.Sportsman;

import java.util.List;
import java.util.Map;

/**
 * sportsmanService接口
 */
public interface ISportsmanService extends IService<Sportsman> {

    /**
     * 查询sportsman列表
     */
    List<Sportsman> selectSportsmanList(Sportsman sportsman);

    Sportsman qrySportsmanByCache(int sportsmanId);

    void saveAll(SportsmanAllVo sportsman);

    /**
     * 统计不同运动员不同艇支完成次数
     * @param boatFrequencyVo
     * @return int
     */
    List<Map<String, Integer>> getCountBoatFrequency(BoatFrequencyVo boatFrequencyVo);
    /**
     * 统计不同运动员不同艇支不同位置的号位占比
     * @param positionRatioVo
     * @return int
     */
    List<Map<String, Object>> getCountPositionRatio(PositionRatioVo positionRatioVo);

    /**
     * 统计艇支划行总公里数
     * @param sportsManId
     * @return List<TrainingBoatTypeVo>
     */
    List<TrainingBoatTypeVo> getCountTrainingBoatType(Integer sportsManId);
    /**
     * 查询每周身体机能数据
     * @return BodyFunctionAnalysisVo
     * @param sportsManId
     */
    List<BodyFunctionAnalysisVo> getBodyFunctionAnalysisVoByweek(int sportsManId);

    List<BodyFunctionAnalysisVo> getBodyFunctionAnalysisVoList(int sportsManId);

    /**
     * 专项最好成绩
     * @param sportManBestResultVo
     * @return
     */
    List<BestPartnerResultVo> getBestResultSpecialProject(SportManBestResultVo sportManBestResultVo);

    /**
     * 根据运动员id,其他参数查询出该名运动员的做好成绩信息
     * 再根据最好成绩的组，航道，dayId，查询出当时与该运动员同船的队友然后展示
     * 最佳拍档的最好成绩
     *
     * @param sportsManId
     * @param kilometers
     * @param boatType
     * @return
     */
    List<BestPartnerResultVo> getBestList(Integer sportsManId, Integer  kilometers, String boatType);
    /**
     * 根据运动员id,其他参数查询出该名运动员的做好成绩信息
     * 再根据最好成绩的组，航道，dayId，查询出当时与该运动员同船的队友然后展示
     * 最佳拍档的最好成绩
     * 查询某周的最好成绩
     * @param map
     * @return
     */
    List<BestPartnerResultVo> getBestWeekList(Map<String,Object> map);
    /**
     * 最佳拍档合作次数
     * 首先查询指定运动员指定艇支类型合作过的所有运动员，即所属同一组同一航道同一项目下的人员
     * 然后根据人员的小组名，航道名，项目id dayId循环查询计算对应次数 然后累加 得到的就是对应艇种对应人员的合作次数
     * @return List<BestPartnerCountVo>
     */
    List<BestPartnerCountVo> getBestPartnerCountVoList(int sportsManId);

    String getNameById(int sportsManId);

    /**
     * 受伤部委统计
     * @param map
     * @return
     */
    List<InjuryCountVo> injuryCount(Map<String,Object> map);

    /**
     * 受伤部位治愈总时长
     * @param map
     * @return
     */
    List<InjuryCountVo> injuryHoursCount(Map<String,Object> map);

    /**
     * 最好成绩PK
     * @param sportManBestResultVo
     * @return
     */
    List<BestPartnerResultVo> getBestResultPK(SportManBestResultVo sportManBestResultVo);
    /**
     * 桨位占比
     * @param sportsManId
     * @return List<OarTypeVo>
     */
    List<OarTypeVo> getCountPulpPosition(int sportsManId);


    List<Map<String, Object>> selectSportsmanCountByType();

    List<Integer> selectSportsmanIdListBySex(int i);

    Sportsman qrySportsmanByName(String sportsmanName);

    Sportsman getSportsmanByPolarId(String deviceId);

    Sportsman qrySportsmanNameById(Integer integer, boolean cache);

    /**
     * 设置运动员心率
     * @param sportsManId
     * @param heart
     */
    void setHeartCount(int sportsManId, int heart);

    int getHeartCount(int sportsManId);

    Sportsman getById(Integer id);

    @Override
    boolean save(Sportsman entity);

    @Override
    boolean updateById(Sportsman entity);

    List<Sportsman> getAllSportsmanPolarId();
}